﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Data;

namespace Cotizav
{
    public class CtrlVisita
    {
        ConexionDataContext conexion;

        internal List<VISITA> getListVisitas()
        {
            throw new System.NotImplementedException();
        }

        internal VISITA getVisita(string idVisita)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    return conexion.VISITA.SingleOrDefault(x => x.idVisita == idVisita);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal bool registrarVisita(VISITA visita)
        {
            bool result = false;

            using (conexion = new ConexionDataContext())
            {
                using (TransactionScope transactionScope = new TransactionScope())
                {
                    try
                    {
                        int correlativoVisita = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").VISITA.Value;
                        string num = Convert.ToString(correlativoVisita);
                        string numero = num.Trim().PadLeft(10, '0');
                        string idVisita = "VISI_" + numero;

                        visita.idVisita = idVisita;

                        //insertamos la visita
                        conexion.VISITA.InsertOnSubmit(visita);
                        conexion.SubmitChanges();
                        conexion.increm_ContVisita();

                        transactionScope.Complete();
                        result = true;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }
       
        internal bool modificarVisita(VISITA visita1)
        {
            bool result = false;

            using (conexion = new ConexionDataContext())
            {
                using (TransactionScope transactionScope = new TransactionScope())
                {
                    try
                    {
                        CONEXION.VISITA visita = conexion.VISITA.Single(x => x.idVisita == visita1.idVisita);
                        
                        visita.idMotivo = visita1.idMotivo;
                        visita.idContacto = visita1.idContacto;
                        visita.contactoEventual = visita1.contactoEventual;
                        visita.observaciones = visita1.observaciones;
                        visita.fechaVisita = visita1.fechaVisita;
                        visita.fechaModificacion = visita1.fechaModificacion;
                        visita.observacionesFinal = visita1.observacionesFinal;
                        visita.estado = visita1.estado;                      

                        conexion.SubmitChanges();
                        transactionScope.Complete();

                        result = true;

                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal DataTable getListaVisita(string idCliente, DateTime? fechaDesde, DateTime? fechaHasta)
        {
            using (conexion = new ConexionDataContext())
            {
                var query = conexion.usp_listarVisita(idCliente, fechaDesde, fechaHasta);

                DataTable result = new DataTable();

                result.Columns.Add("idVisita", Type.GetType("System.String"));
                result.Columns.Add("idCliente", Type.GetType("System.String"));
                result.Columns.Add("idMotivo", Type.GetType("System.String"));
                result.Columns.Add("idContacto", Type.GetType("System.String"));
                result.Columns.Add("nombreVisita", Type.GetType("System.String"));
                result.Columns.Add("nombreMotivo", Type.GetType("System.String"));
                result.Columns.Add("nombreCliente", Type.GetType("System.String"));
                result.Columns.Add("contactoEventual", Type.GetType("System.String"));
                result.Columns.Add("observaciones", Type.GetType("System.String"));
                result.Columns.Add("observacionesFinal", Type.GetType("System.String"));
                result.Columns.Add("fechaVisita", Type.GetType("System.String"));
                result.Columns.Add("fechaRegistro", Type.GetType("System.String"));
                result.Columns.Add("fechaModificacion", Type.GetType("System.String"));
                result.Columns.Add("estado", Type.GetType("System.String"));

                DataRow dr;

                foreach (var c in query)
                {
                    dr = result.NewRow();

                    dr[0] = c.idVisita ?? string.Empty;
                    dr[1] = c.idCliente ?? string.Empty;
                    dr[2] = c.idMotivo ?? string.Empty;
                    dr[3] = c.idContacto ?? string.Empty;
                    dr[4] = c.nombreVisita ?? string.Empty;
                    dr[5] = c.nombreMotivo ?? string.Empty;
                    dr[6] = c.nombreCliente ?? string.Empty;
                    dr[7] = c.contactoEventual ?? string.Empty;
                    dr[8] = c.observaciones ?? string.Empty;
                    dr[9] = c.observacionesFinal ?? string.Empty;
                    dr[10] = c.fechaVisita.HasValue ? c.fechaVisita.Value.ToShortDateString(): string.Empty;
                    dr[11] = c.fechaRegistro.HasValue ? c.fechaRegistro.Value.ToShortDateString() : string.Empty;
                    dr[12] = c.fechaModificacion.HasValue ? c.fechaModificacion.Value.ToShortDateString() : string.Empty;
                    dr[13] = c.estado ?? string.Empty;

                    result.Rows.Add(dr);
                }

                return result;
            }
        }
    }
}
